Far East fonts are very large compared to fonts for western languages. There can be as many as 30 times as many characters in a Japanese, Korean, or Traditional or Simplified Chinese font as in a font containing just Latin 1, 2, and 5 character sets. Computer products such as operating systems and printers which contain western fonts usually include complete font families, i.e., base, italic, bold, and bold italic. However, products containing Far East fonts frequently only include the base fonts but do not include complete font families, due to the large size, cost, and time required to design those fonts. These products usually implement algorithmic enhancements (e.g., shearing, double-striking) to create italic and bold characters. Character glyphs created this way are not typographically correct but are adequate for most users of these products. For purposes of this discussion, bold character glyphs created by algorithmic means will be referred to as "pseudo-bold" characters.
Prior approaches to creating pseudo-bold characters include double striking and multistriking of the base characters. In the double-strike approach, a character is printed twice, once at the normal position and once offset one pixel to the right. This solution is common in low-resolution devices such as dot-matrix printers and video display drivers. The disadvantage of this solution is that it does not adjust for variable point size and resolution. As a result, on high-resolution devices or at large point sizes, a double-struck character is not noticeably bolder than the original character.
In the multistrike approach, the character is overstruck multiple times with variable offsets in the horizontal (X) and vertical (Y) directions. The number of times a character is overstruck in each direction is proportional to its point size and the resolution of the device. For example, if a 10-point character on a 300 dots per inch (dpi) device is overstruck 2 times in both the X and Y directions, then a 20-point character at 300 dpi would be overstruck 4 times (double point size) and a 10-point character at 600 dpi would also be overstruck 4 times (double resolution.)
In a typical multistrike implementation for a printer, the pseudo-bold character is constructed as a bitmap image in RAM before it is printed. The process of creating a pseudo-bold character starts with the original (base) character as a bitmap image. A temporary memory block large enough to hold the base character overstruck n times in the X direction (where n is the multistrike quantity) is allocated. Then the base character is copied into the temporary memory block n times offset by one pixel to the right each time. This has the effect of overstriking the character n times to the right. Then a new memory block large enough to hold the pseudo-bold character is allocated. Then the image in the temporary memory block is copied into the new memory block n times offset by one pixel up each time. The new memory block now holds the pseudo-bold character ready for printing, and the temporary memory block is deallocated.
Stated otherwise, for example, using pixel coordinates where x increases to the right and y increases toward the top of the page, assume the base character is printed at (0,0). The conventional multistrike method overstrikes a base character n times along the X-axis, moving the character one pixel to the right with each overstrike, resulting in an intermediate bitmap. That is, the character is overstruck at (1,0), (2,0), . . . , (n,0). Then the conventional multistrike method repeats the process with the intermediate bitmap, overstriking it n times along the Y-axis, which creates the pseudo-bold character. That is, the resulting intermediate bitmap is overstruck at (0,1), (0,2), . . . , (0,n).
The conventional multistrike method is limited. For non-orthogonal orientations or asymmetrical scaling of the base character, the multistrike method produces a pseudo-bold character which is not true to the shape of the base character.
Accordingly, objects of the present invention are to provide a new system and method for creating pseudo-bold characters at arbitrary orientations (including non-orthogonal orientations), scaling (including non-asymmetric scaling), point sizes, and device resolutions.